#include <iostream>
#include <cstring>
#include <unordered_set>
#include <algorithm>

using namespace std;

const int N = 110, M = 10010;
// s内存储一次能够拿走的石子个数
int s[N], f[M];
int k, n;

// 每个sg节点都表示一个状态所对应的值
// 其值是整数中不包含其所有下一种局面对应值的最小值
// 也就是说如果当前sg(x)不是0，那一定有办法让下一步变成0
// 如果sg(x)是0，那么下一步一定不是0
// 定义最终局面是0
int sg(int x)
{
    // 记忆化搜索有效降低时间复杂度
    if (f[x] != -1)
        return f[x];
    unordered_set<int> S;
    for (int i = 0; i < k; ++i)
        if (x - s[i] >= 0)
            S.insert(sg(x - s[i]));
    for (int i = 0;; ++i)
        if (!S.count(i))
            return f[x] = i;
}

int main()
{
    memset(f, -1, sizeof f);
    cin >> k;
    for (int i = 0; i < k; ++i)
        cin >> s[i];
    cin >> n;
    // 通过把所有石子都异或起来就可以做到判断多个石堆的情况的先手胜负情况
    // 推导过程和Nim游戏同理
    int res = 0;
    while (n--)
    {
        int n1;
        cin >> n1;
        res ^= sg(n1);
    }
    if (res)
        cout << "Yes";
    else
        cout << "No";
    return 0;
}